package com.sxt.feign.core.fun;

import com.sxt.feign.core.enums.HystrixStatus;
import org.aspectj.lang.ProceedingJoinPoint;

/**
 * 设计熔断器的功能
 * @author LSX
 * @create 2019/8/22
 */
public interface HystixCmd {
    /**
     * 拦截请求
     * @param point
     * @return
     */
    Object interceptor(ProceedingJoinPoint point);

    /**
     * 通过请求
     * @param point
     * @return
     */
    Object pass(ProceedingJoinPoint point);

    /**
     * 检查测试请求
     * @param point
     * @return
     */
    Object check(ProceedingJoinPoint point);

    /**
     * 修改熔断器状态
     * @param status
     */
    void changeStatus(HystrixStatus status);

    /**
     * 获取熔断器当前状态
     * @return
     */
    HystrixStatus getStatus();

}
